package com.eduagent.xwqeduagent.utils.oj;

import java.util.HashMap;
import java.util.Map;

/**
 * Judge0评测系统支持的编程语言工具类
 */
public class JudgeLanguage {

    /**
     * 获取语言ID映射表
     * @return 语言名称到ID的映射表
     */
    public static Map<String, Integer> getAllLanguages() {
        Map<String, Integer> languages = new HashMap<>();
        // Judge0 CE API的语言ID，基于最新API返回
        languages.put("c", 50);              // C (GCC 9.2.0)
        languages.put("cpp", 54);            // C++ (GCC 9.2.0)
        languages.put("c_clang", 75);        // C (Clang 7.0.1)
        languages.put("cpp_clang", 76);      // C++ (Clang 7.0.1)
        languages.put("c_gcc_9", 50);        // C (GCC 9.2.0)
        languages.put("cpp_gcc_9", 54);      // C++ (GCC 9.2.0)
        languages.put("java", 62);           // Java (OpenJDK 13.0.1)
        languages.put("java17", 91);         // Java (JDK 17.0.6)
        languages.put("python", 71);         // Python (3.8.1)
        languages.put("python3", 71);        // Python (3.8.1)
        languages.put("python311", 92);      // Python (3.11.2)
        languages.put("python2", 70);        // Python (2.7.17)
        languages.put("javascript", 63);     // JavaScript (Node.js 12.14.0)
        languages.put("nodejs", 63);         // JavaScript (Node.js 12.14.0)
        languages.put("nodejs18", 93);       // JavaScript (Node.js 18.15.0)
        languages.put("go", 60);             // Go (1.13.5)
        languages.put("ruby", 72);           // Ruby (2.7.0)
        languages.put("rust", 73);           // Rust (1.40.0)
        languages.put("csharp", 51);         // C# (Mono 6.6.0.161)
        languages.put("php", 68);            // PHP (7.4.1)
        languages.put("kotlin", 78);         // Kotlin (1.3.70)
        languages.put("swift", 83);          // Swift (5.2.3)
        languages.put("pascal", 67);         // Pascal (FPC 3.0.4)
        languages.put("typescript", 74);     // TypeScript (3.7.4)
        languages.put("typescript5", 94);    // TypeScript (5.0.3)
        languages.put("bash", 46);           // Bash (5.0.0)
        languages.put("sql", 82);            // SQL (SQLite 3.27.2)
        languages.put("multi", 89);          // Multi-file program
        return languages;
    }

    /**
     * 获取语言ID
     * @param language 语言名称
     * @return 语言ID，如果不支持则返回null
     */
    public static Integer getLanguageId(String language) {
        if (language == null) {
            return null;
        }
        return getAllLanguages().get(language.toLowerCase());
    }
    
    /**
     * 检查是否支持指定的语言
     * @param language 语言名称
     * @return 是否支持
     */
    public static boolean isLanguageSupported(String language) {
        return getLanguageId(language) != null;
    }
} 